package persistencia;

import bitclub.Proveedor;
import java.util.ArrayList;
import java.util.List;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * @author Bit Company
 */
public class PProveedor {

    public static void nuevoBD(Proveedor proveedor) {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();

            //Pasamos el INSERT a la base de datos
            statement.executeUpdate("INSERT INTO PROVEEDORES (NOMBRE, APELLIDOS, "
                    + "NOMBRE_EMPRESA, CIF, EMAIL, TELEFONO, DIRECCION, LOCALIDAD, CP) "
                    + "VALUES ('" + proveedor.getNombre() + "', '" + proveedor.getApellidos()
                    + "', '" + proveedor.getNombredeEmpresa() + "', '" + proveedor.getCif()
                    + "', '" + proveedor.getMail() + "', '" + proveedor.getTel_movil()
                    + "', '" + proveedor.getDireccion() + "' ,'" + proveedor.getLocalidad()
                    + "', '" + proveedor.getCodigoPostal() + "')");

            //Asignamos el ID con el que se guardó en la base de datos

            resultSet = statement.executeQuery("SELECT ID FROM PROVEEDORES ORDER BY ID DESC");
            if (resultSet.next()) {
                proveedor.setId(resultSet.getInt("id"));
            }

        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
    }

    public static void actualizarBD(Proveedor proveedor) {
        Connection connection = null;
        Statement statement = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();

            //Pasamos el UPDATE a la base de datos

            statement.executeUpdate("UPDATE PROVEEDORES SET NOMBRE = '" + proveedor.getNombre()
                    + "', APELLIDOS = '" + proveedor.getApellidos()
                    + "', NOMBRE_EMPRESA = '" + proveedor.getNombredeEmpresa()
                    + "', CIF = '" + proveedor.getCif()
                    + "', EMAIL = '" + proveedor.getMail()
                    + "', TELEFONO = '" + proveedor.getTel_movil()
                    + "', DIRECCION = '" + proveedor.getDireccion()
                    + "', LOCALIDAD = '" + proveedor.getDireccion()
                    + "', CP = '" + proveedor.getCodigoPostal()
                    + "' WHERE ID = " + proveedor.getId());

        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
    }

    public static void eliminarBD(Proveedor proveedor) {
        Connection connection = null;
        Statement statement = null;
        

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();
            int id = proveedor.getId();
            statement.executeUpdate("DELETE FROM PROVEEDORES WHERE ID=" + id);
        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }

        }
    }

    public static List<Proveedor> seleccionarPorNombreBD(String nombre_empresa) {
        List<Proveedor> listProveedor = new ArrayList();
        String sql = "SELECT NOMBRE, APELLIDOS, NOMBRE_EMPRESA, CIF, EMAIL, TELEFONO, DIRECCION, LOCALIDAD, CP, ID FROM PROVEEDORES WHERE NOMBRE_EMPRESA LIKE '%" + nombre_empresa + "%'";
        listProveedor = seleccionarBD(sql);
        return listProveedor;
    }

    public static Proveedor seleccionarPorCifBD(String cif) {
        List<Proveedor> listProveedor = new ArrayList();
        String sql = "SELECT nombre, apellidos, nombre_empresa, cif, email, telefono, direccion, localidad, cp, id from proveedores where cif = '" + cif + "'";
        listProveedor = seleccionarBD(sql);
        if (listProveedor.isEmpty()) {
            return null;
        } else {
            return listProveedor.get(0);
        }
    }

    public static Proveedor seleccionarPorIdBD(int id) {
        List<Proveedor> listProveedor = new ArrayList();
        String sql = "SELECT nombre, apellidos, nombre_empresa, cif, email, telefono, direccion, localidad, cp, id from proveedores where id = " + id + "";
        listProveedor = seleccionarBD(sql);
        if (listProveedor.isEmpty()) {
            return null;
        } else {
            return listProveedor.get(0);
        }
    }

    public static List<Proveedor> seleccionarBD(String sql) {
        //Lista de proveedores que devolveremos
        List<Proveedor> listProveedor = new ArrayList();

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            Proveedor proveedor = null;

            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();
            resultSet = statement.executeQuery(sql);

            while (resultSet.next()) {

                proveedor = new Proveedor();

                proveedor.setId(resultSet.getInt("id"));
                proveedor.setNombre(resultSet.getString("nombre"));
                proveedor.setApellidos(resultSet.getString("apellidos"));
                proveedor.setNombredeEmpresa(resultSet.getString("nombre_empresa"));
                proveedor.setCif(resultSet.getString("cif"));
                proveedor.setMail(resultSet.getString("email"));
                proveedor.setTel_movil(resultSet.getString("telefono"));
                proveedor.setDireccion(resultSet.getString("direccion"));
                proveedor.setLocalidad(resultSet.getString("localidad"));
                proveedor.setCodigoPostal(resultSet.getString("cp"));

                //Proveedor construido y lo añadimos a la lista
                listProveedor.add(proveedor);
            }

        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
        return listProveedor;

    }

    public static boolean existeProveedorEnArticuloBD(int proveedor_id) {

        int num = 0;

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();
            resultSet = statement.executeQuery("SELECT COUNT(*) AS CONTADOR FROM ARTICULOS WHERE PROVEEDOR_ID = " + proveedor_id);
            if (resultSet.next()) {
                num = resultSet.getInt("CONTADOR");
            }

        } catch (Exception ex) {
        } finally {
            try {
                resultSet.close();
                statement.close();
                connection.close();

            } catch (Exception ex) {
                System.out.println("Mensaje de Error");
            }
        }
        if (num > 0) {
            return true;
        } else {
            return false;
        }
    }
}
